package model;
import java.util.*;
/**
 * Class DVD - en dvd til udlån
 * 
 * Klassen er en del af programmet DVD lending
 * DVD lending er et udlånssystem, som er textbaseseret UI.
 * 
 * En DVD repræsentere en DVD i vores system, typen ikke selve kopien.
 * 
 * @author Ole, Silas, Danny, Alex, Anders, Ronnie
 * 
 */
public class DVD
{
    // instance variables
    private String barCode;
    private String title;
    private String artist;
    private String publicationDate;
    private ArrayList<Copy> cList;

    /**
     * Constructor for objects of class DVD
     * @param barcode Setter barCode for en nyoprettet DVD
     * title Setter title for en nyoprettet DVD
     * artist Setter artist for en nyoprettet DVD
     * publicationDate Setter publicationDate for en nyoprettet DVD
     */
    public DVD(String barCode, String title, String artist, String publicationDate)
    {
        // initialise instance variables
        this.barCode = barCode;
        this.title = title;
        this.artist = artist;
        this.publicationDate = publicationDate;
        cList = new ArrayList<Copy>();
    }

    /**
     * Herunder skrives get- og set-metoder, hvor der gives mulighed for at ændre i en person, hvis man skulle have brug for det.
     * @param barCode Setter barCode for en nyoprettet DVD 
     */
    public void setBarCode(String barCode)
    {
        this.barCode = barCode;
    }

    /**
     * @return Returnerer barCode for en DVD
     */
    public String getBarCode()
    {
        return barCode;
    }

    /**
     * @param title Setter title for en nyoprettet DVD
     */
    public void setTitle(String title)
    {
        this.title = title;
    }

    /**
     * @return Returnerer titlen for en DVD
     */
    public String getTitle()
    {
        return title;
    }

    /**
     * @param artist Setter artist for en nyoprettet DVD 
     */
    public void setArtist(String artist)
    {
        this.artist = artist;
    }

    /**
     * @return Returnerer artisten for en DVD
     */
    public String getArtist()
    {
        return artist;
    }

    /**
     * @param publicationDate Setter publicationDate for en nyoprettet DVD 
     */
    public void setPublicationDate(String publicationDate)
    {
        this.publicationDate = publicationDate;
    }

    /**
     * @return Returnerer publicationDate for en DVD
     */
    public String getPublicationDate()
    {
        return publicationDate;
    }

    /**
     * Printer informationen om DVD'en
     */
    public void getInfo()
    {
        System.out.println("Title : " + title);
        System.out.println("Barcode : " + barCode);
        System.out.println("Artist : " + artist);
        System.out.println("Dato : " + publicationDate);
    }

    /**
     *  Metoden createCopy indsætter objektet c på ArrayList c.List
     */
    public void createCopy(Copy c)
    {
        Copy currentC = null;
        int i=0;
        boolean found = false;
        String search = c.getSerialNumber();
        if(cList.isEmpty())
        {
            cList.add(c);
            System.out.println("Kopien er opretttet");
        }
        else
        {
            while (!found && i<cList.size()){
                if (cList.get(i).getSerialNumber().equals(search)){
                    found = true; //hvis fundes, returneres true
                    System.out.println("En kopi med det serienummer findes allerede");
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }

            if(found==false)
            {
                cList.add(c);
                System.out.println("Kopien er oprettet");
            }
        }
    }

    /**
     * Metoden removeCopy fjerner kopien fra et array i DVD
     */
    public void removeCopy(Copy c)
    {
        cList.remove(c);
    }

    /**
     * Metoden findCopy finder kopien i et array i DVD
     * @param serialNumber Finder en copy ved hjælp af serialNumber
     * @return Returnerer en copy af en DVD
     */
    public Copy findCopy(String serialNumber)
    {
        Copy currentC = null;
        int i=0;
        boolean found = false;
        if(cList.isEmpty())  //hvis listen er tom skal den ikke begynde at søge i en liste som er tom.
        {
            System.out.println("\n");
        }
        else
        {
            while (!found && i<=cList.size()){
                if (cList.get(i).getSerialNumber().equals(serialNumber)){
                    currentC = cList.get(i);
                    found = true; //hvis fundes, returneres true
                }
                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }
        }
        return currentC; //Her returneres en person
    }

}
